首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏JMCui

    Java Agent 简介

    一、写在前面 Java Agent 这个技术出现在 JDK1.5 之后,对于大多数人来说都比较陌生,但是多多少少又接触过,实际上,我们平时用的很多工具,都是基于 Java Agent 实现的,例如常见的热部署 其实 Java Agent 一点都不神秘,也是一个 Jar 包,只是启动方式和普通 Jar 包有所不同,对于普通的Jar包,通过指定类的 main 函数进行启动,但是 Java Agent 并不能单独启动 二、动手写一个 Java Agent 首先,我们先来写一段简单的 Agent 程序: public class AgentTest { /** * 以 vm 参数的方式载入,在 java 这样才能在加载 Java Agent 之后,找到并运行对应的 agentmain 或者 premain 方法。 三、运行你的 Agent 程序 Java Agent 程序写好了,怎么运行它呢?

    1.2K30发布于 2020-03-26
  • 来自专栏IT云清

    java agent开发

    本文主要记录下如何创建一个简单的java Agent,并配置运行。 1.创建Agent类 package com.java4all.grouth.agent; import java.lang.instrument.Instrumentation; /** * @ description: java Agent * @author: IT云清 */ public class MyAgent { public static void premain(String ,args:"+agentArgs); } } 2.MANIFEST.MF 配置文件 这里在src/main/resources/META-INF/下创建一个MANIFEST.MF文件,指定Agent Manifest-Version: 1.0 Premain-Class: com.java4all.grouth.agent.MyAgent Can-Redefine-Classes: true Can-Retransform-Classes

    1.3K10编辑于 2021-12-06
  • 来自专栏csico

    java agent简介

    Instrumentation inst), 在生成jar包中MANIFEST.MF文件中需要有Premain-Class: xxx.xxx ,xxx.xxx就是上面premain方法所在的类名 在java public static void agentmain(String agentOps, Instrumentation instrumentation), 在生成jar包中MANIFEST.MF文件中需要有Agent-Class : xxx.xxx (xxx.xxx就是上面agentmain方法所在的类名) Can-Retransform-Classes: true 使用下面代码,将agent添加到指定java进程 vm = VirtualMachine.attach(pid); try { vm.loadAgent("D:\\tmp\\my-java-agent-1.0-jar-with-dependencies.jar

    1.1K30发布于 2021-09-06
  • 来自专栏红队蓝军

    java agent使用与agent内存马

    什么是java agent 本质是一个jar包中的类,有两种实现,第一种是通过permain()函数实现。 Java agent的使用方式有两种: 实现premain方法,在JVM启动前加载。 实现agentmain方法,在JVM启动后加载。 agent基础使用 环境搭建 agent项目源码 agent: package com.naihe; ​ import java.io.IOException; import java.lang.instrument public class agent { //java agent 入口 public static void premain(String agentOps, Instrumentation ; import java.nio.file.Paths; import java.security.ProtectionDomain; public class agent { //java

    1.5K20编辑于 2022-04-13
  • 来自专栏红队蓝军

    java agent使用与agent内存马

    什么是java agent 本质是一个jar包中的类,有两种实现,第一种是通过permain()函数实现。 Java agent的使用方式有两种: 实现premain方法,在JVM启动前加载。 实现agentmain方法,在JVM启动后加载。 agent基础使用 环境搭建 agent项目源码 agent: package com.naihe; import java.io.IOException; import java.lang.instrument class agent { //java agent 入口 public static void premain(String agentOps, Instrumentation inst ; import java.nio.file.Paths; import java.security.ProtectionDomain; public class agent { //java

    1.4K10编辑于 2022-05-17
  • 来自专栏微服务生态

    Java Agent那点事

    给公司的一些研发同事分享了Java Agent一些简单的原理和实现,最近比较懒就不整理成文字了,直接上ppt截图。 ? image.png ? image.png ? image.png ?

    59230发布于 2018-08-22
  • 来自专栏FunTester

    Java Agent 开发初探

    Java Agent 概况 简介和功能 Java Agent是一种特殊的Java程序,允许开发者在 Java 应用程序运行时对其进行动态修改和监控的机制。 开发 Java Agent Java Agent 通过实现 java.lang.instrument.ClassFileTransformer 接口,并将其注册到 Instrumentation 对象中 Agent 使用 -javaagent 参数来加载 Java Agent。 加载 Java Agent:使用 VirtualMachine 对象的 loadAgent 方法加载 Java Agent。 传递 Java Agent JAR 文件的路径,这会在目标 JVM 中执行该 Agent

    54510编辑于 2025-01-23
  • 来自专栏DT乱“码”

    Java agent技术原理文档

    Java agent技术原理文档 Java代理 (agent) 是在你的main方法前的一个拦截器 (interceptor),也就是在main方法执行之前,先执行agent代码。 主要利用就是Java SE 5 开始有的新特性,即利用 java.lang.instrument 做动态 Instrumentation 使开发者可以构建独立于应用程序的java agent(代理)程序 而在agent里的代码就是利用ASM等字节码修改工具在需要监控的代码上注入监控代码,捕获代码执行的时间,参数等,然后把这些数据发送到远程数据中心。

    1.5K80发布于 2018-02-09
  • 来自专栏码农沉思录

    Skywalking之Java Agent基础

    ),这其实用了Java探针技术,算是个比较老的技术了,本节就简单介绍一下Java AgentJava Agent 入门 Java Agent是从 JDK1.5 开始引入的,用一句概括其功能的话就是“在main()函数之前的一个拦截器”,也就是在执行main函数前,先执行Agent中的代码。 agent."); System.out.println("参数:" + agentArgs + "\n"); } } Java Agent的入口是premain()方法,听名字就知道是在 target/test-agent.jar=TestAgentArgs 这里等号之后,就是传入premain()方法的参数哈 执行main()方法,会得到如下输出: this is a java agent 注意:Java Agent的代码与你的main方法在同一个JVM中运行,并被同一个类加载器所加载。 ? 搞点有意思的 ?

    3.7K20发布于 2019-10-15
  • 来自专栏FoamValue

    简单聊下 Java Agent

    摘要:在 SkyWalking 课程中有一小节讲到了 Java Agent,零代码侵入就能实现 JVM 层面的 AOP 增强的好技术。 /target/agent-demo.jar=systemNo=main-demo"` 运行 Java Application,得到的结果是: premain(String agentArgs, Instrumentation () hook :3004ms 以上是 Java Agent 技术与 bytebuddy 工具,配合实现的统计方法执行时间功能。 agent-demo 工程 修改 premain() 方法,使用 bytebuddy 工具动态生产 Agent。 本文主要通过两个案例来了解 Java Agent 技术,顺便提出两个问题:Java Agent、bytebuddy 到底是怎么样的一个实现原理?有什么优秀的开源案例?

    1.1K20发布于 2020-08-31
  • 来自专栏Java Agent

    Java Agent(二)、Javassist入门

    1、前言 在 Java Agent 开发中,动态字节码增强是一项核心技术,而 Javassist 是一个高效且易用的字节码操作库。 Javassist(Java Programming Assistant)是一个开源的 Java 字节码操作库。 它是一个用于编辑 Java 字节码的类库;它使 Java 程序能够在运行时定义新类并在 JVM 加载类文件时对其进行修改。 userClass.addMethod(sayHiMethod); // 生成类 userClass.writeFile("E:\\idea_projects\\java-agent-demo 忽略 ... // 生成类 userClass.writeFile("E:\\idea_projects\\java-agent-demo\\src\\main\\java\\");

    73620编辑于 2025-01-14
  • 来自专栏Brucebat的伪技术鱼塘

    探秘Java:“润物细无声”的Java Agent

    下面就来介绍一个JDK自带的工具—— Java Agent 。   如果说AOP是代码层面的代理程序,那么Java Agent就可以说是JVM层面的代理程序了。 ”   和AOP类似,Java Agent的注入也存在 “切点” ,也就是执行的时机,需要注意的是Java Agent的执行时机和它的启动方式密切相关。 Java Agent需要保证在 Agent 当中提供了静态公共的 premian 方法。 通过动态加载的方式启动Java Agent需要保证在 Agent 当中提供了静态公共的 agentmain 方法;   无论是使用静态加载,还是使用动态Attach的方式,都只是单纯提供了切入到目标Java 四、总结   本文较为浅显的讲解了一下Java Agent基本概念和简单使用,如果想要进一步了解Java Agent的执行流程可以查询一下JVM相关的源码。

    1.2K20编辑于 2022-02-08
  • 来自专栏微服务生态

    java instrument agent 原理小结

    代理命令示例 java -cp classes:lib/byte-buddy-1.4.16.jar -javaagent:test-1.0-SNAPSHOT.jar com.test.domain.AgentEntity JPLISAgent(Java Programming Language Instrumentation Services Agent) JVM解析流程图 ? image.png

    39730发布于 2018-08-22
  • 来自专栏架构狂人

    Java Agent原理及实现

    Java AgentJava SE 5.0版本引入的一个新特性,它可以在Java虚拟机(JVM)启动前或者在运行时动态地读取一些class文件,并在内存中修改后替换原始的class文件,从而在不改变原有代码的情况下增强或者监视应用程序的运行 在Java Agent中,有两个主要的API: java.lang.instrument java.lang.ClassFileTransformer java.lang.instrument cmd窗口操作 javac Test.java java -javaagent:/path/to/agent.jar Test 这样就能在控制台输出程序中每个方法的执行时间了。 总结: 在本文中,我们对Java Agent进行了简单的介绍,包括它的原理、运行机制以及如何使用ASM等字节码操作框架来修改类字节码。 Java Agent作为一个非常强大的工具,可以用于应用服务器的诊断和分析工具、AOP、调试器等多种应用场景,而开发者也可以根据自己的业务需求来实现各种各样的agent代码来实现扩展或者监控自己的应用程序

    1.3K20编辑于 2023-08-16
  • 来自专栏红蓝对抗

    浅谈 Java Agent 内存马

    型 之前介绍过 Tomcat 下的 Filter 型的内存马,今天来学习一下 Java Agent 实现内存马注入,因为看到类似冰蝎,哥斯拉工具的内存马注入都是基于 agent 的,所以来研究学习一下 Agent Java Agent 简介 在 jdk 1.5 之后引入了 java.lang.instrument 包,该包提供了检测 java 程序的 Api,比如用于监控、收集性能信息、诊断问题, 通过 java.lang.instrument 实现的工具我们称之为 Java AgentJava Agent 能够在不影响正常编译的情况下来修改字节码,即动态修改已加载或者未加载的类,包括类的属性 、方法 Agent 内存马的实现就是利用了这一特性使其动态修改特定类的特定方法,将我们的恶意方法添加进去 说白了 Java Agent 只是一个 Java 类而已,只不过普通的 Java 类是以 main 函数作为入口点的,Java Agent 的入口点则是 premain 和 agentmain Java Agent 支持两种方式进行加载: 实现 premain 方法,在启动时进行加载 (该特性在 jdk

    3.1K10编辑于 2022-06-30
  • 来自专栏Java Study

    Java agent 与 byte buddy

    Java 中实现agent 中对类的修改 实际上是要实现instrument 包下的 ClassFileTransformer 接口并实现。 Java 中实现 agent 的方式就这样加上之前总结的 instrument 类也就是说instrument  还有 byte buddy 都还有很多用法等着去发现。 进行方法的修改 .intercept()  // 进行方法的委托 在JavaAgent 中 使用byte buddy 来完成对java agent 的操作 用 agentBuilder 来使用Byte buddy方式   对填有注解的方法 进行 agent 的功能操作。 ElementMatchers.nameMatches("xxx") // 根据名称去匹配 ElementMatchers.isAnnotatedWith(ElementMatchers.named(method))// 根据匹配注解 所以 Java

    2.2K00发布于 2020-08-10
  • 来自专栏索码理

    动态追踪之java agent

    上篇文章我们说到阿里的诊断工具Arthas对方法和类的监控使用的是动态追踪技术,本文我们将介绍动态追踪技术Java AgentJava Agent是什么? Java Agent技术,也被称为Java代理、Java探针,从JDK1.5它就出现了,它允许程序员利⽤其构建⼀个独⽴于应⽤程序的代理程序。 Java Agent本身就是个jar包,它利用JVM提供的Instrumentation API来更改加载在JVM中的现有字节码,Java Agent可以理解为是JVM级别的AOP。 Java Agent 怎么用? Java Agent使用包括两个部分:代码实现和配置文件。 Can-Retransform-Classes:表示是否允许Java Agent转换被代理类。 Java Agent的加载 Java Agent的加载分为静态加载和动态加载。

    1.2K20编辑于 2022-12-28
  • 来自专栏卯金刀GG

    JAVA基础☞探针技术】Java探针-Java Agent技术

    1、原理:基于javaAgent和Java字节码注入技术的java探针工具技术原理 ? 3、实例: JavaAgent 是JDK 1.5 以后引入的,也可以叫做Java代理。 代码: package com.shanhy.demo.agent; import java.lang.instrument.ClassFileTransformer; import java.lang.instrument.IllegalClassFormatException ; import java.security.ProtectionDomain; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javassist.ClassPool; import javassist.CtClass; import

    4.4K30发布于 2019-07-25
  • 来自专栏FreeBuf

    谈谈Java Agent技术的实现

    什么是Java Agent技术? Java Agent本质上可以理解为一个插件,该插件就是一个精心提供的Jar包,这个Jar包通过JVMTI(JVM Tool Interface)完成加载,最终借助JPLISAgent(Java Programming Java agent的功能 可以在加载Java文件之前做拦截把字节码做修改 可以在运行期将已经加载的类的字节码做变更 ........... 简单使用 对于Java Agent,主要是存在有java.lang.instrument中实现的API进行操作 Java Agent支持目标JVM启动时加载,也支持在目标JVM运行时加载,这两种不同的加载模式会使用不同的入口函数 之后就是在运行Jar包的时候加载Agent包,这里使用如下代码进行加载: java -javaagent:Agent.jar=Args -jar ..

    58711编辑于 2022-11-14
  • 来自专栏网络安全攻防

    JAVA安全之Java Agent打内存马

    基本介绍 Java Agent是一种特殊的Java程序,它允许开发者在Java虚拟机(JVM)启动时或运行期间通过java.lang.instrument包提供的Java标准接口进行代码插桩,从而实现在 Agent在JVM中有两种加载形式: Agent_OnLoad:JAVA运行时通过-javaagent参数加载指定的agent Agent_OnAttach:通过VM.attach方法向指定的java 进程中注入agent 实现方式 Java Agent的实现方式大致可以分为两种,第一种是在JVM启动前加载的premain-Agent,另外一种是JVM启动之后加载的agentmain-Agent,两者的主要差异如下图所示 : Java_Agent 随后编译打包为jar包 Step 3:编写一个Inject_Agent类,获取特定JVM的PID并注入Agent package com.al1ex; import java.io.IOException ; } } Step 2:编写一个agentmain-Agent——Java_Agent.java import java.lang.instrument.Instrumentation; import

    42510编辑于 2025-01-07
领券